# -*- coding: utf-8 -*-
import datetime
from django.shortcuts import render_to_response
from django.contrib import auth
from django.views.generic.simple import direct_to_template
from django.http import HttpResponseRedirect
from lr import settings
from lr.register.models import Confirm, Profile, AnonymousProfile
from lr.message.models import LrMessage
from lr.events.models import LrEvent
from django.template.loader import render_to_string


def check_user(request):
    """ Аутентификация юзера. Возвращает False, если юзер заблокирован """
    user_is_active = True
    
    if request.method == 'POST' \
    and 'user_login' in request.POST \
    and 'user_password' in request.POST:
        user = auth.authenticate(username=request.POST['user_login'],
                                 password=request.POST['user_password'])
        if user:
            if user.is_active:
                # Такой юзер существует
                auth.login(request, user)
                try:
                    profile = Profile.objects.get(user=request.user)
                except:
                    profile = AnonymousProfile()
                request.profile = profile
            else:
                user_is_active = False
    else:
        user = request.user
        if user.is_authenticated():
            if not user.is_active:
                user_is_active = False
        
    if user and user.is_authenticated() and user_is_active:
        # Проверка, активировал ли юзер свой аккаунт
        try:
            confirm = Confirm.objects.get(user=user.id)
            # Этот юзер не подтвердил свой аккаунт
            times_left = datetime.datetime.now() - confirm.timestamp
            if times_left.days > settings.ACCOUNT_ACTIVATION_DAYS:
                # Время на подтверждение аккаунта истекло, заблокировать юзера
                user.is_active = False
                user.save()
                user_is_active = False
            else:
                # У юзера еще есть время на подтверждение, выдать предупреждение
                pass
        except:
            pass
        
    return user_is_active


def about(request):
    """ О Проекте """
    return direct_to_template(request, 'about.html', { 'text': render_to_string('about/about_text.html') })


def main_face(request):
    """ Формирование содержимого главной страницы сайта """
    if not check_user(request):
        return render_to_response('lock_account.html')
    
    events = LrEvent.objects.order_by('-time')[:15]
    face_data = {}
    face_data['events'] = events
    return direct_to_template(request, 'main_face.html', face_data)


def message(request):
    """ Персональное сообщение для пользователя """
    if not check_user(request):
        return render_to_response('lock_account.html')
    
    if request.user.is_authenticated() and request.user.is_active:
        if LrMessage.objects.filter(user=request.user).count() > 0:
            msg = LrMessage.objects.filter(user=request.user).order_by('timestamp')[0]
            msg.delete()
            return direct_to_template(request, 'message.html', { 'lr_message': msg })
    return HttpResponseRedirect('/')


def main_face_logout(request):
    """ Разлогин и переход на главную страницу """
    if request.user.is_authenticated():
        auth.logout(request)
    
    return HttpResponseRedirect('/')
    